#include "mhelicalform.h"
#include "ui_mhelicalform.h"
#include"data.h"
#include<QTimer>


MHelicalForm::MHelicalForm(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MHelicalForm)
{
    ui->setupUi(this);

    connect(ui->pushButton_start,&QPushButton::clicked,this,[=](){on_Button_start_clicked();});
    connect(ui->pushButton_stop,&QPushButton::clicked,this,[=](){on_PushButton_stop_clicked();});
    connect(ui->pushButton_cleanpos,&QPushButton::clicked,this,[=](){on_PushButton_cleanpos_clicked();});

    QTimer *timer1=new QTimer(this);
    connect(timer1,&QTimer::timeout,this,&MHelicalForm::updateWin);
    timer1->start(100);


}

MHelicalForm::~MHelicalForm()
{
    delete ui;
}

//启动
void MHelicalForm::on_Button_start_clicked(){
    if(Data::handle!=nullptr){
        bool ok;
        float speed=ui->spinBox_sp->value();
        float accel=ui->spinBox_acc->value();
        float decel=ui->spinBox_del->value();
        int posend[5]={ui->spinBox_pos1->value(),ui->spinBox_pos2->value(),ui->spinBox_pos3->value(),ui->spinBox_pos4->value(),ui->spinBox_pos5->value()};
        int posmid[3]={ui->spinBox_posmid1->value(),ui->spinBox_posmid2->value(),ui->spinBox_posmid2->value()};
        int radio[2]={ui->spinBox_rad1->value(),ui->spinBox_rad2->value()};
        float turnsnum=ui->spinBox_turnsnum->value();
        int spacemode=(ui->comboBox_spacemode->currentText()).toInt(&ok,10);
        int sportcal=ui->checkBox_sportcal->isChecked()?0:1;
        int isalong=ui->radioButton_2->isEnabled()?1:0;
        PMC_Base(Data::handle,5,axislist);
        for(int i=0;i<5;++i){
            int enable=0;
            PMC_GetAxisEnable(Data::handle,axislist[i],&enable);
            if(enable==0){
                QMessageBox::about(NULL,"Warn","请检查AXIS0-4使能情况");
                return;
            }
            PMC_SetAtype(Data::handle,axislist[i],1);
            PMC_SetUnits(Data::handle,axislist[i],200);
            PMC_SetSpeed(Data::handle,axislist[i],speed);
            PMC_SetAccel(Data::handle,axislist[i],accel);
            PMC_SetDecel(Data::handle,axislist[i],decel);
        }
        ui->pushButton_start->setEnabled(false);
        ui->label_flag->setText("运行");
        ui->label_flag->setStyleSheet("background-color: rgb(0,0,255)");
        runflage=true;


        if(ui->radioButton_mode->isChecked()){
            //圆心螺旋插补    (句柄，轴数，轴列表，第一轴运动坐标，第二轴运动坐标，第一轴圆心，第二轴圆心，顺逆，第三轴运动距离，速度计算)
            if  (ui->radioButton_type1->isChecked()) PMC_MHelical(Data::handle, 3, axislist, posend[0], posend[1],posmid[0],posmid[1],isalong,posend[2],sportcal);
            //3点画螺旋插补       (句柄，轴数，轴列表，第一轴中点，第二轴中点，第一轴结束，第二轴结束，第三轴运动距离，速度计算)
            else if(ui->radioButton_type2->isChecked()) PMC_MHelical2(Data::handle, 3, axislist, posmid[0], posmid[1], posend[0], posend[1], posend[2],sportcal);
            //椭圆+螺旋插补       (句柄，轴数，轴列表，第一轴终点，第二轴终点，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，第三轴移动距离)
            else if(ui->radioButton_type3->isChecked()) PMC_MEclipseHelical(Data::handle, 3, axislist, posend[0], posend[1], posmid[0], posmid[1], isalong, radio[0], radio[1], posend[2]);
            //椭圆+螺旋多圈插补     (句柄，轴数，轴列表，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，圈数，第三轴运动距离，第三轴速度计算)
            else if(ui->radioButton_type4->isChecked()) PMC_Tangle(Data::handle, 3, axislist, posmid[0], posmid[1],isalong, radio[0], radio[1], turnsnum, posend[2], sportcal);
            //空间圆弧+螺旋插补     (句柄，轴数，轴列表，第一轴运动距离1，第二轴运动距离1，第三轴运动距离1，第一轴运动距离2，第二轴运动距离2，第三轴运动距离2，模式，第4轴运动距离，第5轴运动距离)
            else if(ui->radioButton_type5->isChecked()) PMC_MSpherical(Data::handle, 5, axislist, posend[0], posend[1], posend[2], posmid[0], posmid[1], posmid[2], spacemode, posend[3], posend[4]);
        }
        else{
            //圆心螺旋插补    (句柄，轴数，轴列表，第一轴运动坐标，第二轴运动坐标，第一轴圆心，第二轴圆心，顺逆，第三轴运动距离，速度计算)
            if  (ui->radioButton_type1->isChecked()) PMC_MHelicalAbs(Data::handle, 3, axislist, posend[0], posend[1],posmid[0],posmid[1],isalong,posend[2],sportcal);
            //3点画螺旋插补       (句柄，轴数，轴列表，第一轴中点，第二轴中点，第一轴结束，第二轴结束，第三轴运动距离，速度计算)
            else if(ui->radioButton_type2->isChecked()) PMC_MHelical2Abs(Data::handle, 3, axislist, posmid[0], posmid[1], posend[0], posend[1], posend[2],sportcal);
            //椭圆+螺旋插补       (句柄，轴数，轴列表，第一轴终点，第二轴终点，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，第三轴移动距离)
            else if(ui->radioButton_type3->isChecked()) PMC_MEclipseHelicalAbs(Data::handle, 3, axislist, posend[0], posend[1], posmid[0], posmid[1], isalong, radio[0], radio[1], posend[2]);
            //椭圆+螺旋多圈插补     (句柄，轴数，轴列表，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，圈数，第三轴运动距离，第三轴速度计算)
            else if(ui->radioButton_type4->isChecked()) PMC_TangleAbs(Data::handle, 3, axislist, posmid[0], posmid[1],isalong, radio[0], radio[1], turnsnum, posend[2], sportcal);
            //空间圆弧+螺旋插补     (句柄，轴数，轴列表，第一轴运动距离1，第二轴运动距离1，第三轴运动距离1，第一轴运动距离2，第二轴运动距离2，第三轴运动距离2，模式，第4轴运动距离，第5轴运动距离)
            else if(ui->radioButton_type5->isChecked()) PMC_MSpherical(Data::handle, 5, axislist, posend[0], posend[1], posend[2], posmid[0], posmid[1], posmid[2], spacemode, posend[3], posend[4]);
        }


    }


}

//停止
void MHelicalForm::on_PushButton_stop_clicked(){
    if(Data::handle!=nullptr){
        PMC_Rapidstop(Data::handle,3);
        ui->pushButton_start->setEnabled(true);
        runflage=false;
        ui->label_flag->setText("停止");
        ui->label_flag->setStyleSheet("background-color: rgb(255,0,0)");
    }

}

//坐标清零
void MHelicalForm::on_PushButton_cleanpos_clicked(){
    if(Data::handle!=nullptr){
        for(int i=0;i<5;++i){
            PMC_SetDpos(Data::handle,axislist[i],0);
        }
    }
}

//窗口更新
void MHelicalForm::updateWin(){

    if(Data::handle!=nullptr){
        float dpos=0;
        for(int i=0;i<5;++i){
            PMC_GetDpos(Data::handle,axislist[i],&dpos);
            QString pos = QString::number( dpos,'f',3);
            if(i==0) ui->label_pos1->setText(pos);
            else if(i==1) ui->label_pos2->setText(pos);
            else if(i==2) ui->label_pos3->setText(pos);
            else if(i==3) ui->label_pos4->setText(pos);
            else if(i==4) ui->label_pos5->setText(pos);
        }
        if(runflage){
            int value[5]={0,0,0,0,0};
            for(int i=0;i<5;++i){
                PMC_GetIfIdle(Data::handle,i,&value[i]);
            }
            //cout<<value[0]<<"_"<<value[1]<<"_"<<value[2]<<"_"<<value[3]<<endl;
            if(value[0]==-1&&value[1]==-1&&value[2]==-1&&value[3]==-1&&value[4]==-1){
                runflage=false;
                ui->pushButton_start->setEnabled(true);
                ui->pushButton_start->setEnabled(true);
                ui->label_flag->setText("停止");
                ui->label_flag->setStyleSheet("background-color: rgb(255,0,0)");
            }
        }

    }

}

void MHelicalForm::showEvent(QShowEvent *event){
    QList<QString> optionsmode={"0","1","2","3"};
    ui-> comboBox_spacemode->addItems(optionsmode);

}

void MHelicalForm::showWarn(QString message){
    warn=QMessageBox::information(this,tr("warn"),message);
}
